class Solution:
    def convert(self, s: str, numRows: int) -> str:
        length = len(s)
        arr = list(s)
        res = [''] * length
        if numRows == 1 or numRows > length: # 特殊情况: 只有 1 行 或 行数大于字符串长度
            return s
        idx = 0
        left = numRows * 2 - 2
        right = 0
        for i in range(numRows):
            res[idx] = arr[i] # 将当前行的第一个字符存储到 res 列表中
            idx += 1
            j = i # 然后 j 也代表下标，从 i 开始，每次加 left 和 right 两个步数
            while j < length:
                j += left
                if left!= 0 and j < length: # left!=0 为了排除掉最后一行，因为最后一行 left=0，不能再多放一次
                    res[idx] = arr[j]
                    idx += 1
                j += right
                if right!= 0 and j < length: # right!= 0 同理，为了排除第一行
                    res[idx] = arr[j]
                    idx += 1
            left -= 2
            right += 2
        return ''.join(res)

